import axios from 'axios'

// 配置主要的axios实例
const myAxios = axios.create({
	baseURL: 'http://159.75.133.177:8080',
	// baseURL: 'http://localhost:8080',
	// withCredentials: true
})
// 让post能够成功发送数据
myAxios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
myAxios.defaults.headers.get['Content-Type'] = 'application/x-www-form-urlencoded'

// axios请求拦截
myAxios.interceptors.request.use(config => {
	// 为请求头对象，添加Token验证的Authorization字段
	config.headers.Authorization = `${localStorage.getItem('token')}`
	return config
})

// axios响应拦截
myAxios.interceptors.response.use(
	response => {
		// 对响应数据做处理
		return response
	},
	error => {
		// 对响应错误做处理
		if (error.response) {
			// 服务器返回了错误状态码
			switch (error.response.status) {
				case 401: // 未授权
					console.log('未授权，请登录')
					// 清除token并跳转到登录页
					localStorage.removeItem('token')
					window.location.href = '/'
					break
				case 403: // 禁止访问
					console.error('没有权限访问该资源')
					break
				case 404: // 资源不存在
					console.error('请求的资源不存在')
					break
				case 500: // 服务器错误
					console.error('服务器内部错误')
					break
				default:
					console.error(`未知错误: ${error.response.status}`)
			}
		} else if (error.request) {
			// 请求已发出，但没有收到响应
			console.error('网络错误，无法连接到服务器')
		} else {
			// 请求配置有误
			console.error('请求配置错误:', error.message)
		}
		return Promise.reject(error)
	}
)

// 配置额外的axios实例，用于请求其他的后端(其它平台的API)
const otherAxios = axios.create({
	withCredentials: true
})
otherAxios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
otherAxios.defaults.headers.get['Content-Type'] = 'application/x-www-form-urlencoded'

// otherAxios响应拦截
otherAxios.interceptors.response.use(
	response => {
		// 对响应数据做处理
		return response
	},
	error => {
		// 对响应错误做处理
		console.error('外部API请求错误:', error)
		return Promise.reject(error)
	}
)

export { myAxios, otherAxios }